package com.reactim.message.connection;

import org.springframework.messaging.rsocket.RSocketRequester;
import reactor.core.publisher.Mono;

/**
 * 连接管理器接口
 * 定义连接管理的核心操作
 */
public interface ConnectionManager {
    
    /**
     * 存储用户连接
     * 
     * @param userId 用户ID
     * @param requester RSocket请求器
     * @param connectionInfo 连接信息
     * @return 是否存储成功
     */
    Mono<Boolean> storeConnection(Long userId, RSocketRequester requester, ConnectionInfo connectionInfo);
    
    /**
     * 获取用户连接详情
     * 
     * @param userId 用户ID
     * @return 连接详情
     */
    Mono<ConnectionDetails> getConnection(Long userId);
    
    /**
     * 移除用户连接
     * 
     * @param userId 用户ID
     * @return 是否移除成功
     */
    Mono<Boolean> removeConnection(Long userId);
    
    /**
     * 检查用户是否在线
     * 
     * @param userId 用户ID
     * @return 是否在线
     */
    Mono<Boolean> isUserOnline(Long userId);
    
    /**
     * 获取在线用户数量
     * 
     * @return 在线用户数量
     */
    Mono<Long> getOnlineUserCount();
    
    /**
     * 向用户发送消息
     * 
     * @param userId 用户ID
     * @param route 消息路由
     * @param message 消息内容
     * @return 发送结果
     */
    Mono<Void> sendMessageToUser(Long userId, String route, Object message);
    
    /**
     * 更新用户最后活跃时间
     * 
     * @param userId 用户ID
     * @return 是否更新成功
     */
    Mono<Boolean> updateLastActiveTime(Long userId);
    
    /**
     * 获取指定实例的连接信息
     * 
     * @param instanceId 实例ID
     * @return 连接信息列表
     */
    Mono<java.util.List<ConnectionDetails>> getConnectionsByInstance(String instanceId);
}